package com.commentlib.utils;

import com.commentlib.R;
import com.commentlib.app.BaseApplication;

import java.io.File;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class StringUtils {
	/**
	 * 创建目录
	 * @param sDir
	 * @return
	 */
	public static synchronized File createFileDir(String sDir){
		File file = new File(sDir);
		if (!file.exists()){
			file.mkdirs();
		}
		return file;
	}
	
	//为字母
	public static boolean isCharacter(String str) {
		Pattern pattern = Pattern.compile("^[A-Za-z]+$");
		return pattern.matcher(str).matches(); 
	}
	
	//为数字或者字母
	public static boolean isNumAndChar(String str) {
		Pattern pattern = Pattern.compile("^[\\da-zA-Z]*$");
		return pattern.matcher(str).matches(); 
	}
	
	//将字符数组转成字符串
	public static String joinStringArray(String[] str, String separate) {
		StringBuffer buf = new StringBuffer();
		for(int i=0; i < str.length; i++){
			buf.append(str[i]);
			if (i != (str.length - 1)) {
				buf.append(separate);
			}
		}
		return buf.toString();
	}
	
	//将字符数组转成字符串
	public static String joinStringArray(List<String> lstStr, String separate) {
		StringBuffer buf = new StringBuffer();
		for(int i=0; i < lstStr.size(); i++){
			buf.append(lstStr.get(i));
			if (i != (lstStr.size() - 1)) {
				buf.append(separate);
			}
		}
		return buf.toString();
	}
	
	//字符串转成数组
	public static void stringSplit2List(String str, List<String> lst) {
		if (!str.equals("")) {
			String[] array = str.split(",");
			for (int i = 0; i < array.length; ++ i) {
				lst.add(array[i]);
			}
		}
	}
	
	/**
     * 判断是否是空字符串 null和"" 都返回 true
     */
    public static boolean isEmpty(String s) {
        if (s != null && !"".equals(s)) {
            return false;
        }
        return true;
    }
    
    /**
     * 判断是否数字表示
     * 
     * @param src
     *            源字符串
     * @return 是否数字的标志
     */
    public static boolean isNumeric(String src) {
        boolean return_value = false;
        if (src != null && src.length() > 0) {
            Pattern numericPattern = Pattern.compile("^[0-9\\-]+$");
            Matcher m = numericPattern.matcher(src);
            if (m.find()) {
                return_value = true;
            }
        }
        return return_value;
    }

    /**
     * 判断是否是数字或者小数表示
     *
     * @param src
     *            源字符串
     * @return 是否数字的标志
     */
    public static boolean isNumericOrPoint(String src) {
        boolean return_value = false;
        if (src != null && src.length() > 0) {
            Pattern numericPattern = Pattern.compile("(^[0-9\\-]+$)|([1-9]\\d*\\.\\d*[1-9])|(0\\.\\d*[1-9])");
            Matcher m = numericPattern.matcher(src);
            if (m.find()) {
                return_value = true;
            }
        }
        return return_value;
    }

    /**
     * 判断是否数字表示,且长度为len
     *
     * @param src
     *            源字符串
     * @return 是否数字的标志
     */
    public static boolean isNumLen(String src, int len) {
        boolean return_value = false;
        if (src != null && src.length() > 0) {
            Pattern numericPattern = Pattern.compile("^[0-9\\-]+$");
            Matcher m = numericPattern.matcher(src);
            if (m.find() && src.length() == len) {
                return_value = true;
            }
        }
        return return_value;
    }

    /**
     * 判断是否数字表示
     * 
     * @param src
     *            源字符串
     * @return 是否数字的标志
     */
    public static boolean isNumericString(String src) {
        boolean return_value = false;
        if (src != null && src.length() > 0) {
            Pattern numericStringPattern = Pattern
                    .compile("^[0-9\\-\\-]+$");
            Matcher m = numericStringPattern.matcher(src);
            if (m.find()) {
                return_value = true;
            }
        }
        return return_value;
    }
    
    /**
     * 判断是否纯字母组合
     * 
     * @param src
     *            源字符串
     * @return 是否纯字母组合的标志
     */
    public static boolean isABC(String src) {
        boolean return_value = false;
        if (src != null && src.length() > 0) {
            Pattern abcPattern = Pattern.compile("^[a-z|A-Z]+$");
            Matcher m = abcPattern.matcher(src);
            if (m.find()) {
                return_value = true;
            }
        }
        return return_value;
    }

    /**
     * 执行trim操作（包含全角和半角的空格;）
     *
     * @param str 字符串
     * @return 结果字符串
     */
    public static String trim(String str) {
        if (isEmpty(str)) {//判断字符串是否为空或长度为零或是一段空格，上面有该函数代码
            return "";
        } else {
            str = str.trim();// 去掉半角符号的空格
            while (str.startsWith("　")) {//该空格为全角空格
                str = str.substring(1, str.length()).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
            while (str.startsWith(" ")) {//该空格为全角空格
                str = str.substring(1, str.length()).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
            while (str.startsWith(BaseApplication.activity.getString(R.string.kg_1))) {//该空格为&#160;
                str = str.substring(1, str.length()).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
            while (str.endsWith("　")) { // 该空格为全角空格
                str = str.substring(0, str.length() - 1).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
            while (str.endsWith(" ")) { // 该空格为全角空格
                str = str.substring(0, str.length() - 1).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
            while (str.endsWith(BaseApplication.activity.getString(R.string.kg_1))) { // 该空格为&#160;
                str = str.substring(0, str.length() - 1).trim();
                if (isEmpty(str)) {
                    return "";
                }
            }
        }
        return str;
    }
    
    /**
     * 
     * 截取字符，不转码
     * 
     * @param subject
     * @param size
     * @return
     */
    public static String subStrNotEncode(String subject, int size) {
        if (subject.length() > size) {
            subject = subject.substring(0, size);
        }
        return subject;
    }

    /**
     * 判断是否是手机号码
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static boolean isPhone(String str)
            throws PatternSyntaxException {
        if (isEmpty(str))return false;
//        String regExp = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\\d{8}$";
        String regExp = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 判断是否是邮箱
     * @param str
     * @return
     */
    public static boolean isEmail(String str){
        if (isEmpty(str))return false;
        String regExp = "";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 验证身份证号是否符合规则
     * @param text 身份证号
     * @return
     */
    public static boolean personIdValidation(String text) {
        String regx = "[0-9]{17}x";
        String regx1 = "[0-9]{17}X";
        String reg1 = "[0-9]{15}";
        String regex = "[0-9]{18}";
        return text.matches(regx) || text.matches(regx1) || text.matches(reg1) || text.matches(regex);
    }

    /**
     * 判断是否线下交易
     * @return
     */
    public static boolean chatOffline(String msg){
        return msg.contains("微信")
                || msg.contains("qq")
                || msg.contains("QQ")
                || msg.contains("手机")
                || msg.contains("电话")
                || isPhone(msg);
    }

    /**
     * 根据身份证验证性别
     * @param ID
     * @return 1男  0女  -1身份证错误
     */
    public static int checkSexByID(String ID){
        int sex = -1;
        if (!StringUtils.isEmpty(ID) && ID.length() > 17){
            String num17 = ID.substring(16, 17);
            if (isNumeric(num17)){
                int type = Integer.valueOf(num17);
                if ((type&1) == 1){
                    sex = 1;
                }else {
                    sex = 0;
                }
            }
        }
        return sex;
    }
}
